#pragma once

#include <stdint.h>

enum class IpcCmd : uint16_t
{
    Invalid = 0,
    Exit,      // 进程退出
    Accept,    // 有客户端连接到服务器
    SendData,  // 客户端实例发送数据到另一客户端实例，发送数据到终端
    DataHandle // 客户端发送数据给另一客户端数据处理，不发送到终端
};

struct IpcPkgBuf
{
public:
    uint8_t *pBuffer; // 包缓冲起始地址
    uint16_t nMaxLen; // 包最大长度，最大64K
    uint16_t nPkgLen; // 包需接收的总长度，最长64K
    IpcCmd cmdIpc;    // IPC命令

public:
    IpcPkgBuf()
    {
        pBuffer = nullptr;
        nMaxLen = 0;
        nPkgLen = 0;
        cmdIpc = IpcCmd::Invalid;
    }

    ~IpcPkgBuf()
    {
        Destroy();
    }

    bool Init(uint16_t nMax)
    {
        pBuffer = (uint8_t *)malloc(nMax);

        if (nullptr != pBuffer)
            memset(pBuffer, 0, nMax);

        nMaxLen = nMax;

        return (nullptr != pBuffer);
    }

    void Destroy()
    {
        if (nullptr != pBuffer)
        {
            free(pBuffer);
            pBuffer = nullptr;
        }
    }

    void Reset()
    {
        nPkgLen = 0;
        cmdIpc = IpcCmd::Invalid;
    }
};